/**
 * @author : andy
 * @description : instance对象管理类
 */
export default class ClientManager<T> {
  /** 实例映射表，用于增删改查 */
  private map: Map<string , T> = new Map();
  /**
   * 根据id获取对应的instance实例
   * @param id instance实例id
   * @returns instance实例
   */
  get (id: string) {
    return this.map.get(id);
  }
  /**
   * 添加instance实例
   * @param instance instance实例
   */
  add (instance: T) {
    this.map.set((instance as {id: string}).id , instance);
  }
  /**
   * 根据id删除对应的instance实例
   * @param id instance实例id
   */
  delete (id: string) {
    if (this.map.has(id)) {
      this.map.delete(id);
    }
  }
  /**
   * 清空所有的instance实例
   */
  clear () {
    this.map.clear();
  }
  /**
   * 根据id判断是否存在这个instance
   * @param id instance实例id
   * @returns 布尔值
   */
  has (id: string) {
    return this.map.has(id);
  }
  /**
   * 返回所有的实例
   * @returns 所有的实例
   */
  getAll () {
    return [...this.map.values()];
  }
}